// 通用类型工具
export type Nullable<T> = T | null
export type Optional<T> = T | undefined
export type Recordable<T = any> = Record<string, T>

// // 提取函数参数类型
// export type ExtractFunctionParams<T> = T extends (...args: infer P) => any ? P : never

// // 提取函数返回值类型
// export type ExtractFunctionReturn<T> = T extends (...args: any[]) => infer R ? R : never

// // 深度可选
// export type DeepPartial<T> = {
//   [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]
// }

// // 深度必选
// export type DeepRequired<T> = {
//   [P in keyof T]-?: T[P] extends object ? DeepRequired<T[P]> : T[P]
// }

// // 联合类型转交叉类型
// export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
//   k: infer I,
// ) => void
//   ? I
//   : never

// // 获取对象的值类型
// export type ValueOf<T> = T[keyof T]

// // 排除指定键
// export type ExcludeKeys<T, K extends keyof T> = Omit<T, K>

// // 只保留指定键
// export type PickKeys<T, K extends keyof T> = Pick<T, K>

// // 字符串字面量类型
// export type LiteralUnion<T extends string> = T | (string & {})

// // 获取数组元素类型
// export type ArrayElement<T> = T extends (infer U)[] ? U : never

// 获取Promise的resolve类型
// export type PromiseType<T> = T extends Promise<infer U> ? U : T
